import os
import sys
import webbrowser

import tornado.web
from tornado import httpserver
from tornado import ioloop
from tornado import options

from bopress import coreplugins
from bopress import settings
from bopress.handlers import urls
from bopress.hook import Hooks, do_action
from bopress.log import Logger
from bopress.orm import SessionFactory
from bopress.utils import Utils

__author__ = 'tinyms'
settings.BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PORT = 9090
settings.PLUGINS_ROOT = os.path.join(settings.BASE_DIR, "plugins")
Utils.mkdirs(settings.PLUGINS_ROOT)
sys.path.append(settings.PLUGINS_ROOT)
Hooks.load(settings.PLUGINS_ROOT, coreplugins.load)
do_action("bo_settings", settings)
Logger.init()
SessionFactory.create_tables()

# 插件静态路径路由映射
static_paths = Hooks.static_paths()
for static_path in static_paths:
    urls.append(tornado.web.url(r"/bopress/plugin/static/{0}/(.*)".format(static_paths[static_path]),
                                tornado.web.StaticFileHandler,
                                {"path": os.path.join(settings.PLUGINS_ROOT, static_path)}))

do_action("bo_urlmapping", urls)
ui_modules = list()
do_action("bo_uimodules", ui_modules)
if __name__ == '__main__':
    options.parse_command_line()
    app = tornado.web.Application(
        debug=settings.DEBUG,
        handlers=urls,
        static_path=os.path.join(settings.BASE_DIR, "static"),
        template_path=settings.PLUGINS_ROOT,
        ui_modules=ui_modules,
        cookie_secret=settings.COOKIE_SECRET,
        xsrf_cookies=settings.XSRF_COOKIES,
    )
    coreplugins.init_data()
    do_action("bo_tornado_server", app)
    print("Tornado %s running %i.." % (tornado.version, PORT))
    http_server = httpserver.HTTPServer(app)
    http_server.listen(PORT, "127.0.0.1")
    if settings.DEBUG:
        webbrowser.open_new_tab("http://127.0.0.1:%i" % PORT)
    ioloop.IOLoop.instance().start()
